/******************************************************************************/
//	Event.h	-	interface for the Event class.
/******************************************************************************/

#ifndef _EVENT_H_
#define _EVENT_H_

class Event  
{
	public:

		enum EventId
		{
			EVENT_ID_UNDEFINED = 0,
				
			EVENT_ID_FIRST,

				// Finite State Machine Input
				FSM_INPUT_ID_FIRST,

					FSM_INPUT_A,
					FSM_INPUT_B,
					FSM_INPUT_C,
					FSM_INPUT_D,
				
				FSM_INPUT_LAST,
					
			EVENT_ID_LAST
		};

		static const char* EventNames[EVENT_ID_LAST + 1]; 
		
	private:

		EventId	m_nEventId;	// the id of the event (see EventId enum above for possible values)

		int		m_nSourceId,		// The id of the object sending this event
				m_nDestinationId;	// The id of the object to receive this event
			
		
	public:

		static int	s_nEventsNewed,	//statistic information 
					s_nEventsDeleted;

		Event();
		~Event();
		
		/******************************************************************************/
		//	Set	-	Sets the information for an event
		//
		//	In:		_id				-	The event id this event will contain
		//									(see EventId enum above for possible values)
		//			_sourceId		-	The id of the object sending the event
		//			_destinationId	-	The id of the object to receive the event
		/******************************************************************************/
		void Set(EventId _id, int _sourceId, int _destinationId);

		/******************************************************************************/
		//	Set	-	Sets the information for an event
		//
		//	In:		_id	-	The event id this event will contain
		//							(see EventId enum above for possible values)
		/******************************************************************************/
		void Set(EventId _id);

		// GetId	- returns the event's id
		EventId GetId()	{	return m_nEventId;	}	
};

#endif	// _EVENT_H_